小编典典

将更改推送到远程存储库时,此 Git 警告消息是什么?

all

描述有点简洁。我只是在我的本地主分支上添加了一个文件并将其推送回远程仓库。知道为什么会这样吗?

warning: updating the current branch
warning: Updating the currently checked out branch may cause confusion,
warning: as the index and work tree do not reflect changes that are in HEAD.
warning: As a result, you may see the changes you just pushed into it
warning: reverted when you run 'git diff' over there, and you may want
warning: to run 'git reset --hard' before starting to work to recover.
warning: 
warning: You can set 'receive.denyCurrentBranch' configuration variable to
warning: 'refuse' in the remote repository to forbid pushing into its
warning: current branch.
warning: To allow pushing into the current branch, you can set it to 'ignore';
warning: but this is not recommended unless you arranged to update its work
warning: tree to match what you pushed in some other way.
warning: 
warning: To squelch this message, you can set it to 'warn'.
warning: 
warning: Note that the default will change in a future version of git
warning: to refuse updating the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.   

阅读 129

收藏
2022-06-07

共1个答案

小编典典

使用 Git 2.3.0(2015 年 2 月之后)

如果没有人在那个远程非裸仓库中工作,那么应该可以推送到已签出的分支。

但为了在该操作中更安全,您现在可以(使用 Git 2.3.0,2015 年 2 月)在该远程仓库中执行以下操作:

git config receive.denyCurrentBranch updateInstead

它比 config 更安全receive.denyCurrentBranch=ignore:只有当您没有覆盖正在进行的修改时,它才会允许推送。

请参阅Johannes Schindelin ( )提交 1404bcbdscho

receive-pack: 添加另一个选项receive.denyCurrentBranch

在工作目录之间同步时,通过 ‘ push‘ 而不是 ‘ pull‘ 来更新当前分支会很方便,例如从 VM 内部推送修复程序时,或者推送在用户机器上进行的修复程序时(开发人员不在安装 ssh 守护程序的自由,更不用说知道用户的密码了)。

这个补丁不再需要常见的解决方法——推入一个临时分支,然后在另一台机器上合并。

新选项是:

updateInstead

相应地更新工作树,但如果有任何未提交的更改,则拒绝这样做。


提交 4d7a5ce添加了更多测试,并提到:

前一个仅测试通过推送部署更新的路径在已添加到索引的目标工作树中具有不兼容更改的情况,但功能本身希望要求工作树是比测试的要干净得多。

添加更多测试以保护功能免受将来错误地(从功能发明者的角度)放宽清洁度要求的更改,即:

  • 仅对工作树而不是对索引的更改仍然是需要保护的更改;
  • 需要保护工作树中将被推送部署覆盖的未跟踪文件;
  • 碰巧使文件与被推送的文件相同的更改仍然是需要保护的更改(即功能的清洁度要求比检出的要求更严格)。

此外,测试对工作树的仅统计更改不是拒绝推送部署的理由。

使用 Git < 2.3.0(2015 年 2 月之前)

最常见的方法是从非裸存储库创建一个裸存储库,并将远程/本地非裸 git 存储库都指向新创建的裸存储库。

2022-06-07